
// 高阶函数: 用来处理函数的函数就是高阶函数

// 如果某个函数的参数是函数，则该函数就是高阶函数
/**
 * 用第三个参数对应的函数来处理前两个参数
 * @param {number} first 第一个操作数
 * @param {number} second 第二个操作数
 * @param {function} operation 用来处理前两个参数的操作函数 
 */
function operate( first , second , operation ) {
    // 调用第三个参数对应的函数完成运算操作并返回其运算结果
    return operation( first , second );
}

console.log(  operate( 10 , 5 , (a,b) => a + b ) );
console.log(  operate( 10 , 5 , (a,b) => a - b ) );
console.log(  operate( 10 , 5 , (a,b) => a * b ) );
console.log(  operate( 10 , 5 , (a,b) => a / b ) );
console.log(  operate( 10 , 5 , (a,b) => a % b ) );


// 如果某个函数的返回值是个函数，则该函数就是高阶函数
function welcome(name){
    function display(){
        console.log( `欢迎${name}` );
    }
    // 外部函数的返回值是另一个函数
    return display;
}

let x = welcome('唐三藏');
let y = welcome('观音姐姐');

x();
y();